package com.neouton.crm.pm.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.neouton.common.entity.ActivitiVO;
import com.neouton.crm.entity.SysUserEntity;
import com.neouton.crm.pm.entity.BackMoneyPlanVo;
import com.neouton.crm.pm.entity.ContractInfoVO;
import com.neouton.crm.screen.Hander.MapResultHandler;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 合同相关Mapper
 * @Author libingkun
 * @Date 2022年11月30日
 * @Version 1.0
 *          初始化迁移
 */
@Mapper
public interface ContractInfoMapper {

    /**
     * 保存合同信息
     * @param contractInfo
     * @return
     */
    Boolean saveContractInfo(@Param("contractInfo") ContractInfoVO contractInfo);

    /**
     * 更新合同信息
     * @param contractInfo
     * @return
     */
    Boolean updateContractInfo(@Param("contractInfo")ContractInfoVO contractInfo);

    Boolean backUpContractInfo(@Param("contractId")Integer contractId,@Param("backUserId")Integer backUserId);

    /**
     * 更具主键获取项目信息
     * @param approvalId 审批主键
     * @return
     */
    ContractInfoVO queryContractInfoByapprovalId(Integer approvalId);

    /**
     * 更具主键获取合同历史数据
     * @param approvalId 审批主键
     * @return
     */
    ContractInfoVO queryContractInfoHistoryByApprovalId(Integer approvalId);

    /**
     * 更具主键获取合同信息
     * @param ContractId
     * @return
     */
    ContractInfoVO queryContractInfoById(@Param("contractId")Integer ContractId);

    /**
     * 更具项目ID获取合同信息
     * @param projectId
     * @return
     */
    List<ContractInfoVO> queryContractInfoByProjectId(@Param("projectId")Integer projectId,@Param("callWms")String callWms);

    /**
     * 获取当日最大合同单号
     * @return
     */
    Integer getContractMaxNumByDate();

    void saveBackMoneyPlan( List<BackMoneyPlanVo> list);

    /**
     * 根据合同id查询得到回款计划内容
     * @param id
     * @return
     */
    List<BackMoneyPlanVo> searchBackMoneyPlanBycontractId(Integer id);

    /**
     * 根据合同id查询得到回款计划内容
     * @param id
     * @return
     */
    BackMoneyPlanVo searchBackMoneyPlanByBmpId(Integer id);

    /**
     * 获取当前项目下审批已通过的合同金额总和
     * @param projectId
     * @return
     */
    BigDecimal queryConMoneyByProjectId(Integer projectId);

    /**
     * 分页查询合同列表
     *
     * @param page
     * @param entity
     * @return
     */
    IPage<ContractInfoVO> queryContractsByPage(@Param("page") IPage page,
                                               @Param("vo") ContractInfoVO entity,
                                               @Param("userList") List<SysUserEntity> userList);

    /**
     * 查询全部合同信息
     *
     * @param page
     * @param entity
     * @return
     */
    List<ContractInfoVO> queryAllContractInfos(@Param("vo") ContractInfoVO entity,
                                               @Param("userList") List<SysUserEntity> userList);

    /**
     * 分页查询回款计划
     *
     * @param page
     * @param entity
     * @return
     */
    IPage<BackMoneyPlanVo> queryBackMoneyPlansByPage(@Param("page") IPage page,
                                               @Param("vo") BackMoneyPlanVo entity,
                                               @Param("userList") List<SysUserEntity> userList);

    List<BackMoneyPlanVo> queryBackMoneyPlans(@Param("vo") BackMoneyPlanVo entity,@Param("userList") List<SysUserEntity> userList);

    void queryPurBackInfoByConId(MapResultHandler<String, BigDecimal> mapResultHandler, @Param("conId") Integer conId);

    /**
     * 分页查询
     *
     * @param page
     * @param entity
     * @return
     */
    IPage<ContractInfoVO> queryApprovalContractByPage(@Param("page") IPage page,
                                                    @Param("vo") ContractInfoVO entity,
                                                    @Param("activitis") List<ActivitiVO> activitiVOS);

    /**
     * 分页查询
     *
     * @param page
     * @param entity
     * @return
     */
    IPage<ContractInfoVO> queryApprovalContractDoneByPage(@Param("page") IPage page,
                                                        @Param("vo") ContractInfoVO entity);

    /**
     * 分页查询
     *
     * @param page
     * @param entity
     * @return
     */
    IPage<ContractInfoVO> queryApprovalContractRecordByPage(@Param("page") IPage page,
                                                          @Param("vo") ContractInfoVO entity,
                                                          @Param("userList") List<SysUserEntity> userList);

    List<ContractInfoVO> queryContractInfoByProjectList(@Param("customerId")int customerId);

    Boolean deleteContractInfoById(Integer contractId);
}
